<?php

================================================================================ Docker
查看CentOS版本号：

安装docker：
1. root账户登录，查看内核版本如下
   cat /etc/redhat-release

2. 把yum包更新到最新: yum update

3. 安装需要的软件包:  yum-util 提供 yum-config-manager 功能，另外两个是devicemapper驱动依赖的：
   yum install -y yum-utils device-mapper-persistent-data lvm2

4. 设置yum源（选择其中一个）：
   . yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo（中央仓库）
   . yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo（阿里仓库）

5. 可以查看所有仓库中所有docker版本，并选择特定版本安装
   um list docker-ce --showduplicates | sort -r

6. 安装Docker: yum install docker-ce-18.03.1.ce

7. 删除Docker: yum remove docker-ce.x86_64 ddocker-ce-cli.x86_64 -y


安装报错: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

解决：
$ systemctl daemon-reload
$ sudo service docker restart
$ sudo service docker status (should see active (running))


修改Docker镜像，解决拉取过慢
{
  "registry-mirrors": ["https://jixivjaz.mirror.aliyuncs.com"]
}


查看Docker状态: systemctl status docker
启动docker: systemctl start docker
关闭docker: systemctl stop docker
docker启动容器: Docker start 容器名称
删除docker中的镜像: docker rmi 镜像id
删除docker中的容器: docker rm 容器id
查看Docker所有的镜像: sudo docker images
查看Docker正在运行的容器: docker ps -a
启动Docker容器: docker start 容器ID
停止Docker容器: docker stop 容器ID

启动报错日志: sudo docker logs -f 容器ID
查看启动日志: docker logs -f --tail=30 logstash

使用命令进入容器: docker exec -it PID /bin/bash/

注意: 如果下载的容器需要提供对外访问的端口号，那么就要去修改'云服务器配置'针对端口号开放！然后重启！否则，外部连不上！
镜像: 安装包
容器: 可运行程序


================================================================================ Java
首先删除原本的JDK(OpenJDK)
rpm -qa |grep jdk
rpm -qa |grep gcj
(rpm -qa|grep openjdk -i)
rpm -e --nodeps 需要删除的软件
删除JDK相关包：
rpm -e jdk包名
如：
rpm -e  jdk-1.7.0_75-fcs.x86_64
回车之后无提示证明删除成功，然后再检测是否还有JDK：java -version
执行java -version检测之后没有删除的话：
查看java链接指向
#ll /etc/alternatives |grep java
删除这个链接指向：

执行命令：alternatives --remove java
如：
#alternatives --remove java /usr/lib/jvm/jre-1.6.0-openjdk

====== 查看yum库中的Java安装包
yum -y list java*

//以yum库中java-1.8.0为例, "*"表示将java-1.8.0的所有相关Java程序都安装上
sudo yum -y install java-1.8.0-openjdk*


================================================================================ Maven
//yum安装
sudo wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
sudo sed -i s/\$releasever/6/g /etc/yum.repos.d/epel-apache-maven.repo
sudo yum install -y apache-maven

//安装完毕，查看安装位置
mvn -version

//添加阿里云的镜像地址
vi /usr/share/apache-maven/conf/settings.xml

//修改下面节点
<mirror>
  <id>alimaven</id>
  <name>aliyun maven</name>
  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  <mirrorOf>central</mirrorOf>
</mirror>

//配置仓库位置
<localRepository>/cicro/var/m2/repo</localRepository>



================================================================================ Git
sudo yum install -y git

去除每次pull重复输入密码：
cd /
git config --global credential.helper store

* 执行之后会在.gitconfig文件中多加红色字体项
[user]
        name = 天明
        email = xxxx@xxxx.com
[credential]
        helper = store




================================================================================ Nginx
通过yum search nginx看看是否已经添加源成功。如果成功则执行下列命令安装Nginx。
sudo yum install -y nginx

3、启动Nginx并设置开机自动运行
sudo systemctl start nginx.service
sudo systemctl enable nginx.service

日志文件：/var/log/nginx



================================================================================ 安装Solo - 博客
博客: https://ld246.com/article/1565021959471

step:1 [solo]

cd /
mkdir solo
mkdir solo/skins

docker run --detach --name solo --network=host \
--env RUNTIME_DB="MYSQL" \
--env JDBC_USERNAME="root" \
--env JDBC_PASSWORD="123456" \
--env JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \
--env JDBC_URL="jdbc:mysql://139.9.42.190:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" \
b3log/solo --listen_port=8080 --server_scheme=http --server_host=139.9.42.190

参数说明:
--env JDBC_PASSWORD="123456" 将 123456 换成你的密码
--listen_port=8080 监听的端口
--server_scheme=http 请求方式，暂时使用 http，后面我们会换成 https
--server_host=www.jinjianh.com 你的域名，如果你没有域名可以写 ip 地址
--rm 容器停止后会删掉，带上 rm 会省很多事


step2: [nginx]
# 切换到服务器根目录
cd /
# 创建主目录
mkdir data
# 创建文件
mkdir data/nginx data/nginx/conf data/nginx/logs data/nginx/www data/nginx/ssl
cd /data/nginx/www
vim index.html ( 需要创建一个静态文件, 否则启动会报错 )

dockerData/nginx 用于存放 docker 下 nginx 自定义文件
dockerData/nginx/conf 存放 nginx 配置文件
dockerData/nginx/log 存放 nginx 日志文件
dockerData/nginx/www 存放 nginx 访问的资源文件
dockerData/nginx/ssl 存放 ssl 证书
启动 nginx

docker run --name nginx -p 80:80 -d --rm nginx

docker cp nginx:/etc/nginx/nginx.conf /data/nginx/conf/nginx.conf 导出配置文件 [nginx.conf]
docker cp nginx:/etc/nginx/conf.d /data/nginx/conf/conf.d 导出配置 [nginx.conf]

docker stop nginx，会自动删除现在的 nginx 容器

重新启动:
docker run -d -p 80:80 --name nginx \
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /data/nginx/www:/usr/share/nginx/html \
-v /data/nginx/logs:/var/log/nginx nginx

参数说明:
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ 挂载配置文件 nginx.conf
-v /data/nginx/conf/conf.d:/etc/nginx/conf.d 挂载配置文件 default.conf
-v /data/nginx/www:/usr/share/nginx/html  挂载项目文件
-v /data/nginx/logs:/var/log/nginx 挂载配置文件



================================================================================ 安装MySql
docker search mysql

sudo docker pull mysql:5.7

mkdir /data/mysql

docker run -tid \
    --privileged=true \
    --name mysql \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -e TZ="Asia/Shanghai" \
    -v /etc/localtime:/etc/localtime:ro \
    -v /data/mysql/my.cnf:/etc/mysql/my.cnf \
    -v /data/mysql/data:/var/lib/mysql \
    mysql:5.7

详见: 附录/my.cnf

如果报错的话：记得要把/data/mysql 文件夹里的my.cnf为【文件】，不能是【文件夹】！
然后删除之前启动的镜像:
docker ps -a
docker rm eb70256933f4

docker exec -it PID bash
mysql -uroot -p


修改mysql5.7的密码:
Use mysql;
// 更新数据库-内网密码
update user set authentication_string=password('Connext2020@isp') where user='root' and Host='localhost';
// 更新数据库-外网密码
update user set authentication_string=password('Connext2020@isp') where user='root' and Host='%';
// 刷新生效
flush privileges;


================================================================================ RabbitMQ
docker pull rabbitmq:3.8.19-management
# docker pull rabbitmq:management

mkdir /data/rabbitmq

docker run -tid \
    --privileged=true \
    --name rabbitmq \
    -p 5671:5671 \
    -p 5672:5672 \
    -p 4369:4369 \
    -p 25672:25672 \
    -p 15671:15671 \
    -p 15672:15672 \
    -e TZ="Asia/Shanghai" \
    -v /etc/localtime:/etc/localtime:ro \
    -v /data/rabbitmq:/var/lib/rabbitmq \
    --hostname=host \
    rabbitmq:3.8.19-management


================================================================================ ES
docker pull elasticsearch:7.5.1

docker run -tid \
    --privileged=true \
    --name es \
    -p 9200:9200 -p 9300:9300 \
    -e TZ="Asia/Shanghai" \
    -v /etc/localtime:/etc/localtime:ro \
    -v /data/es/config:/usr/share/elasticsearch/config \
    -v /data/es/logs:/usr/share/elasticsearch/logs \
    -v /data/es/data:/usr/share/elasticsearch/data \
    docker.io/elasticsearch:7.5.1


启动报错日志:  sudo docker logs -f 容器ID
报错: Exception in thread "main" java.nio.file.NoSuchFileException: /usr/share/elasticsearch/config/jvm.options
解决:
. 单节点启动:
docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.5.1

. 拷贝es容器文件夹config到宿主机目录
docker cp elasticsearch:/usr/share/elasticsearch/config /data/es/config


================================================================================ Logstash
docker pull docker.io/logstash:7.5.1
mkdir -p /data/logstash/config/
vim /data/logstash/config/logstash.conf
logstash.conf内容:
input {
 # 我们创建了两个微服务demo 所以建立两个不同的输入，将两个服务的日志分别输入到不同的索引中
  tcp {
    mode => "server"
    host => "0.0.0.0"  # 允许任意主机发送日志
    type => "elk1"      # 设定type以区分每个输入源
    port => 4560
    codec => json_lines    # 数据格式
  }
  tcp {
    mode => "server"
    host => "0.0.0.0"
    type => "elk2"
    port => 4561
    codec => json_lines
  }

}
filter {
  #Only matched data are send to output.
}
output {
  # For detail config for elasticsearch as output,
  # See: https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html

  if [type] == "elk1" {
    elasticsearch {
      action => "index"          # 输出时创建映射
      hosts  => "139.9.42.190:9200"   # ElasticSearch 的地址和端口
      index  => "elk1"         # 指定索引名
      codec  => "json"
     }
  }
  if [type] == "elk2" {
    elasticsearch {
      action => "index"          #The operation on ES
      hosts  => "139.9.42.190:9200"   #ElasticSearch host, can be array.
      index  => "elk2"         #The index to write data to.
      codec  => "json"
     }
  }
}

docker run -tid \
    --privileged=true \
    --name logstash \
    -p 4560:4560 \
    -e TZ="Asia/Shanghai" \
    -v /etc/localtime:/etc/localtime:ro \
    -v /data/logstash/config/:/config-dir \
    docker.io/logstash:7.5.1 -f /config-dir/logstash.conf

查看启动日志：docker logs -f --tail=30 logstash


================================================================================ Kibana
docker pull docker.io/kibana:7.5.1

docker run -tid \
    --privileged=true \
    --name kibana \
    -p 5601:5601 \
    -e TZ="Asia/Shanghai" \
    -e ELASTICSEARCH_URL=http://172.19.88.46:9200 \
    -v /etc/localtime:/etc/localtime:ro \
    docker.io/kibana:7.5.1

报错: Kibana server is not ready yet
解决:

1. 查看容器内[es]的ip
   docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' [pid|name]

2. 修改[Kibnan]映射的es的ip
   docker exec -it kibana容器id /bin/bash
   cd config
   vi kibana.yml

   只需要将上面的 "http://elasticsearch:9200" 中的 elasticsearch 替换成上一步的es容器内部ip就可以了。

3. 重启( es 和 kibaba)
   docker restart espid
   docker restart kibanapid

详情: https://blog.csdn.net/whatday/article/details/107879989


单例启动:
sudo docker run --name kibana --link=elasticsearch:test -p 5601:5601 -d 2d0

控制台添加日志:
Management --------[指定监控日志]---------> ElasticSearch.Index Management --------[针对该索引的表达式匹配]---------> Kibnan.Index Patterens


================================================================================ Redis
1. 首先下载redis镜像：
   docker pull redis
   (安装最新镜像: docker pull redis:latest)

2. 然后创建一个文件夹用来存放redis的配置文件、数据等(也就是所谓的挂载目录,作用就是将此目录中的文件或文件夹覆盖掉容器内部的文件或文件夹)

3. 在上面创建的目录下使用命令启动redis容器
docker run -d -p 6379:6379 -v $PWD/conf/redis.conf:/usr/local/etc/redis/redis.conf -v $PWD/data:/data --name my-redis docker.io/redis redis-server /usr/local/etc/redis/redis.conf --appendonly yes

例如:
docker run -d -p 6379:6379 -v /data/redis/conf/redis.conf:/data/redis/conf/redis.conf -v /data/redis/data:/data --name my-redis docker.io/redis redis-server /data/redis/conf/redis.conf --appendonly yes
-d：表示后台运行，不加-d执行上面的命令你就会看到redis启动的日志信息了
-p：表示端口映射，冒号左面的是我们的宿主机的端口，也就是我们虚拟机的端口，而右侧则表示的是mysql容器内的端口

--name: 是我们给redis容器取的名字

-v: 表示挂载路径，$PWD表示当前目录下，冒号左面的表示我们宿主机的挂载目录，也就是我们虚拟机所在的文件路径，冒号右边则表是的是redis容器在容器内部的路径，上面的命令我分别挂载了redis.conf(redis的配置文件)，如需使用配置文件的方式启动redis，这里则需要加上，还有redis存放数据所在的目录

--appendonly yes: 表示redis开启持久化策略

接着我们通过 redis-cli 连接测试使用 redis 服务。
$ docker exec -it redis-test /bin/bash

查看是否启动:
. 查看进程: ps -aux | grep redis
. 端口监听查看方式: netstat -lanp | grep 6379


================================================================================ DataX-Web
Step1: 基础环境
. MySQL (5.5+) 必选，对应客户端可以选装, Linux服务上若安装mysql的客户端可以通过部署脚本快速初始化数据库
. JDK (1.8.0_xxx) 必选
. Maven (3.6.1+) 必选
. DataX 必选
. Python (2.x)
  (支持Python3需要修改替换datax/bin下面的三个python文件，替换文件在doc/datax-web/datax-python3下) 必选，主要用于调度执行底层DataX的启动脚本，默认的方式是以Java子进程方式执行DataX，用户可以选择以Python方式来做自定义的改造

说明: [JDK11 + Maven]的环境变量配置
# JDK11
export JAVA_HOME=/xm/sofawarie/jdk11

# Maven
export MAVEN_HOME=/xm/sofawarie/maven3.6
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/

# 配置环境导入
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin


Step2:
[DataX安装]
. 注意如果执行报错: 将plugins包里面所有'._'的包删除

[Data-Web安装]
. ./bin/install.sh
. 配置文件: vi ./modules/datax-admin/conf/bootstrap.properties
. 配置python: 在项目目录下/modules/datax-execute/bin/env.properties 指定PYTHON_PATH的路径
. 启动: /bin/start-all.sh
. 停止: /bin/stop-all.sh
. 查看: jps
. 访问: ip:port:9527/index.html

Linux定时任务:
. datax + crontal 一分钟执行一次
. 编辑定时任务: crontab -e
  * * * * * /xm/sofawarie/datax/bin/sync.sh
. 开启定时任务: service crond start | stop | reload















.
